# -*- coding: utf-8 -*-
import time
from celery import shared_task
from celery.utils.log import get_task_logger
from flask import g

logger = get_task_logger(__name__)

"""
普通函数装饰器为 celery task
"""


@shared_task
def async_add(x, y, *args, **kwargs):
    return sum([x, y])


"""
绑定任务为实例方法
"""


@shared_task(bind=True)
def async_add_2(self, x, y, **kwargs):
    logger.info(self.request.__dict__)
    g.name = 'async_add_2'
    return x + y, g.name


"""
任务回调状态
当我们有个耗时时间较长的任务进行时一般我们想得知它的实时进度，这里就需要我们自定义
一个任务状态用来说明进度并手动更新状态，从而告诉回调当前任务的进度，具体实现：
"""


@shared_task(bind=True)
def test_mes(self, **kwargs):
    for i in range(1, 11):
        time.sleep(1)
        self.update_state(state='PROGRESS', meta={'p': i * 10})

    return 'finish'
